/**
 * 
 */
package cn.biplam.front.template.pageFrame.mdManage;

import cn.biplam.common.wrapper.ErrorMessage;
import cn.biplam.common.wrapper.UserInfo;
import cn.biplam.front.html.HtmlDiv;
import cn.biplam.front.html.HtmlImage;
import cn.biplam.front.html.HtmlText;
import cn.biplam.front.html.base.HtmlWindow;
import cn.biplam.front.template.Template;
import cn.biplam.front.template.control.TreeNavigator;

/**
 * 页面布局分为上左右三块区域显示的界面模版，上面是标题和操作按钮区域，右边是导航栏，左边是详细信息操作区<br>
 * <p>
 * 	简单用法：<br>
 * mp=new MdPage("页面ID","应用系统路径","用户信息");<br>
 * mp.setTitleDesc("标题文字描述");   【可选】  <br>
 * mp.setTitleLogo("表图片路径");     【可选】<br>
 * mp.putNavigator("页面导航栏对象");  【可选】<br>
 * HtmlWindw mp.get();
 * </p>
 * @author XiaoRuxing 2009-5-24下午03:28:49
 * @version 1.0
 */
public class MdPage implements Template{

	/** 页面ID */
	private String ID;
	/** 模版主操作区域页面ID */
	private String domanID;
	/** 标题 */
	private HtmlWindow title;
	/** 标题Log图片 */
	private HtmlWindow titleLogo;
	/** 标题文字内容 */
	private HtmlWindow titleDesc;
	/** 导航栏 */
	private HtmlWindow navigatorTree;
	/** 导航栏标题  */
	private String navigatorTitle;
	/** 元数据管理主操作区 */
	private HtmlWindow mdDomain;
	/** 整个界面所处的容器 */
	private HtmlDiv md;
	/** 系统路径 */
	private String sHomeUrl;
	/** 用户信息 */
	private UserInfo mUser;
	/** 导航栏是否可见 */
	private boolean navigatorVisiable=false;
	/** 导航栏是否可折叠 */
	private boolean navigatorShrink=true;
	/** 页面是否有标题 */
	private boolean showTitle=false;
	/**导航的宽度 */
	private String navigationWidth;

	/**
	 * 创建页面布局分为上左右三块区域显示的界面
	 * @param ID   页面ID 
	 * @param sHomeUrl 系统路径 
	 * @param mUser 用户信息
	 * @throws ErrorMessage
	 */
	public MdPage(String ID,String sHomeUrl,UserInfo mUser) throws ErrorMessage{
		this.ID=ID;
		this.md=new HtmlDiv(ID);
		this.title=new HtmlDiv(ID+"t","mdt");
		this.titleLogo=new HtmlDiv(ID+"tl","mdtl");
		this.titleDesc=new HtmlDiv(ID+"td","mdts");
		this.domanID=ID+"d";
		this.mdDomain=new HtmlDiv(domanID,"mdd");
		this.sHomeUrl=sHomeUrl;
		this.mUser=mUser;
	}

	/**
	 * 设置标题Logo图片
	 * @param titleLogo 标题logo图片路径 
	 * @throws ErrorMessage
	 */
	public void setTitleLogo(String titleLogoUrl) throws ErrorMessage{
		HtmlImage logo=new HtmlImage(sHomeUrl+titleLogoUrl);
		this.titleLogo.put(logo);
		this.showTitle=true;
	}
	
	/**
	 * 设置标题文字描述内容
	 * @param titleDesc 标题文字描述
	 * @throws ErrorMessage
	 */
	public void setTitleDesc(String titleDesc) throws ErrorMessage{
		HtmlText desc=new HtmlText(null,null,titleDesc);
		this.titleDesc.put(desc);
		this.showTitle=true;
	}
	
	/**
	 * 设置标题
	 * @param titleDesc    标题描述
	 * @param titleLogoUrl 标题Logo图片Ｕrl
	 * @throws ErrorMessage 
	 */
	public void setTitle(String titleDesc,String titleLogoUrl) throws ErrorMessage{
		this.setTitleDesc(titleDesc);
		this.setTitleLogo(titleLogoUrl);
	}
	
	/**
	 * 设置界面上部区域和下部区域分隔线
	 * @throws ErrorMessage
	 */
	private HtmlWindow _createSeperatorLine() throws ErrorMessage{
		HtmlDiv seperatorLine=new HtmlDiv(this.ID+"sl");
		HtmlImage sep=new HtmlImage(sHomeUrl+"/images/dm_manage_seperator.gif","mds");
		seperatorLine.put(sep);
		return seperatorLine;
	}

	/**
	 * 设置界面的右侧导航栏区域内容
	 * @param navigator    右侧导航栏导航树
	 * @param navigatorTitle 右侧导航栏标题
	 * @throws ErrorMessage
	 */
	public void putNavigator(HtmlWindow navigatorTree,String navigatorTitle) throws ErrorMessage{
		this.putNavigator(navigatorTree, navigatorTitle, true);
	}
	
	/**
	 * 设置界面的右侧导航栏区域内容
	 * @param navigator    右侧导航栏导航树
	 * @param navigatorTitle 右侧导航栏标题
	 * @param navigatroShink 导航栏是否可折叠
	 * @throws ErrorMessage
	 */
	public void putNavigator(HtmlWindow navigatorTree,String navigatorTitle,boolean navigatroShink) throws ErrorMessage{
		if(navigatorTree!=null){
			this.navigatorTree=navigatorTree;
			this.navigatorTitle=navigatorTitle;
			this.navigatorVisiable=true;
			this.navigatorShrink=navigatroShink;
		}
	}

	/**
	 * 设置界面的左侧详细信息区域界面
	 * @param mdTable  详细信息管理界面
	 * @throws ErrorMessage
	 */
	public void putManage(HtmlWindow mdTable) throws ErrorMessage{
		if(mdTable!=null){
			this.mdDomain.put(mdTable);
		}
	}

	/**
	 * 创建界面右侧可折叠导航栏
	 * @throws ErrorMessage
	 */
	private HtmlWindow _createNavigator() throws ErrorMessage{
		TreeNavigator tree=new TreeNavigator(ID+"n",navigatorTitle,sHomeUrl,mUser);
		tree.setTree(navigatorTree);
		if(this.navigationWidth!=null){
			tree.setWidth(this.navigationWidth);
		}
		if(this.navigatorShrink){
			tree.setBind("mdNaviResize('"+this.ID+"');","mdNaviResize('"+this.ID+"');");
		}
		return tree.get();
	}
	
	/**
	 * 设置属性和内容
	 * @throws ErrorMessage
	 */
	private void _setContent() throws ErrorMessage{
		/** 将logo,标题描述和操作按钮放入标题 */ 
		if(this.showTitle){
			this.title.put(titleLogo);
			this.title.put(titleDesc);
			/** 放入标题 */
			this.md.put(title);
			/** 创建分割线 */
			this.md.put(_createSeperatorLine());
		}
		/** 放入对象导航栏 */
		if(navigatorVisiable){
			this.md.put(_createNavigator());
		}
		/** 放入对象管理区 */
		this.md.put(mdDomain);
		
		mdDomain.bind("mdResize('"+this.ID+"');");
	}

	/**
	 * 页面布局分为上左右三块区域显示的界面
	 * @return 页面布局分为上左右三块区域显示的界面
	 * @throws ErrorMessage
	 */
	public HtmlWindow get() throws ErrorMessage {
		_setContent();
		return md;
	}

	/**
	 * 获取当前模版的主操作区域页面ID
	 * @return 当前模版的主操作区域页面ID
	 */
	public String getDomanID() {
		return domanID;
	}
	
	/**
	 * 设置导航的宽度
	 * @param width
	 */
	public void setNavigationWidth(String width){
		this.navigationWidth = width;
	}
}
